package com.example.backend.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.backend.common.Result;
import com.example.backend.mapper.CustomerMapper;
import com.example.backend.pojo.Customer;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 客户信息控制器
 */

/**
 *功能性描述
 * 一般@PostMapping接口用于新增，@putapping用于修改，@getMapping用于查询
 * @RestController是一个组合注解
 * 要想使用@PostMapping等注解，就必须加上上面的组合注解
 */

@RestController//用来返回json数据
@RequestMapping("/customer") //统一的路由,给接口加上一个统一的前缀

public class CustomerController {

    @Resource//引入Mapper,快熟实现，但不规范，规范是通过service层引入
    CustomerMapper customerMapper;

    //插入数据——增加客户,?:表示泛型，任意一种类型
    @PostMapping
    public Result<?> save(@RequestBody Customer customer) {
        if(customer.getDataStatus() == null) {
            customer.setDataStatus("新增");
        }
        customerMapper.insert(customer);
        return Result.success();
    }

    //调用updateById更新方法进行更新操作
    @PutMapping
    public Result<?> update(@RequestBody Customer customer) {

        customerMapper.updateById(customer);
        return Result.success();
    }

    //{customerId}：{}占位符的方式传入参数；通过@PathVariable注解引入参数，当有多个参数时，就需要，加多个注解以及参数
    //如:@DeleteMapping("/{id}/{name}")
    //delete(@PathVariable Long customerId,@PathVariable string name)
    @DeleteMapping("/{customerId}")
    public Result<?> delete(@PathVariable Long customerId) {

        customerMapper.deleteById(customerId);
        return Result.success();
    }


    //根据客户姓名模糊查询
    //pageNum:当前页面，当前翻到的是第几页，前往第几页
    //pageSize:每页有多少条
    //search:前端定义的查询的关键字
    //可通过lambdaQuery()来生成一个Wrapper对象，给lambdaQuery()一个泛型
    //StrUtil:hutool的工具库，一个值的空值判断，判断某个值不为空值
    @GetMapping
    public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              @RequestParam(defaultValue = "") String search) {
        LambdaQueryWrapper<Customer> wrapper = Wrappers.<Customer>lambdaQuery();
        if(StrUtil.isNotBlank(search)) {
            wrapper.like(Customer::getCustomerName, search);
        }
        Page<Customer> customerPage = customerMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
        return Result.success(customerPage);
    }

}



















